package com.bstek.service;

import com.bstek.entity.ItemEntity;

import java.util.List;

/**
 * @Description:
 * @Author: zhoulitong
 * @Date: 2021/4/9 13:56
 */
public interface ItemValidate {

    /**
     * 解析内容是否为空
     *
     * @param qsAnalyzeList
     * @return
     */
    void analyzeIsEmpty(List<ItemEntity.QsAnalyze> qsAnalyzeList);

    /**
     * 选项内容长度校验
     *
     * @param opts
     * @return
     */
    void optsLengthCheck(List<String> opts);

    /**
     * 校验题型是否存在
     *
     * @param edu
     * @param type
     */
    void checkEduAndType(Integer edu, Integer type);

    /**
     * 完形填空,语法选择
     *
     * @param stem
     * @param qsList
     */
    void countWx(String stem, List<ItemEntity.Qs> qsList);

    /**
     * 七选五或语法填空
     *
     * @param stem
     * @param qsList
     */
    void countQxw(String stem, List<ItemEntity.Qs> qsList);

    /**
     * 听力理解/首字母填空/选词填空
     *
     * @param stem
     * @param qsList
     */
    void countTllj(String stem, List<ItemEntity.Qs> qsList);


    /**
     * 题干选项个数-七选五
     *
     * @param mainOptions
     */
    void countQxwCount(List<ItemEntity.MainOption> mainOptions);


    /**
     * 题干选项内容-七选五
     *
     * @param mainOptions
     */
    void countQxwContent(List<ItemEntity.MainOption> mainOptions);

    /**
     * 题干选项顺序-七选五
     *
     * @param mainOptions
     */
    void countQxwOrder(List<ItemEntity.MainOption> mainOptions);

    /**
     * 某些题型不能没有答题区之一
     *
     * @param subtype
     * @param desc
     */
    void mustAnswer(Integer subtype, String desc);

    /**
     * 语法填空答题区
     *
     * @param type
     * @param desc
     */
    void countYftkAnswer(Integer type, String desc, List<ItemEntity.QsAnswer> answers);


    /**
     * 某些题型不能没有答题区之二
     *
     * @param subtype
     * @param desc
     */
    void countSomeAnswer(Integer subtype, String desc, List<ItemEntity.QsAnswer> answers);


    /**
     * 校验小题选项个数
     *
     * @param opts
     * @param subtype
     * @return
     */
    void countOpts(List<String> opts, Integer subtype);

    /**
     * 校验小题选项内容
     *
     * @param opts
     * @param subtype
     * @return
     */
    void contentOpts(List<String> opts, Integer subtype);

    /**
     * 校验小题选项顺序
     *
     * @param opts
     * @param subtype
     * @return
     */
    void orderOpts(List<String> opts, Integer subtype);


    /**
     * 校验连线题选项
     *
     * @param lineOptions
     * @param subtype
     * @return
     */
    void lineOpts(List<ItemEntity.LineOption> lineOptions, Integer subtype);


    /**
     * 答案个数
     *
     * @param qsAnswers
     * @param subtype
     * @param type
     */
    void countAnswer(List<ItemEntity.QsAnswer> qsAnswers, Integer subtype, Integer type);

    /**
     * 答案格式
     *
     * @param qsAnswers
     * @param subtype
     */
    void typeAnswer(List<ItemEntity.QsAnswer> qsAnswers, Integer subtype);

    /**
     * 答案内容
     *
     * @param qsAnswers
     * @param opts
     * @param lineOptions
     * @param mainOptions
     * @param type
     * @param subtype
     * @param answerObjective
     */
    void contentAnswer(List<ItemEntity.QsAnswer> qsAnswers, List<String> opts,
                       List<ItemEntity.LineOption> lineOptions, List<ItemEntity.MainOption> mainOptions,
                       Integer type, Integer subtype, Boolean answerObjective);


    /**
     * 解析
     *
     * @param analyzes
     * @param opts
     * @param qsAnswers
     * @param type
     * @param subtype
     */
    void checkQsAnalyze(List<ItemEntity.QsAnalyze> analyzes, List<String> opts,
                        List<ItemEntity.QsAnswer> qsAnswers, Integer type, Integer subtype);

}
